package io;

/**
 * cjj
 * 2025/5/9
 * io同步阻塞
 */
public class IO {
    /**
     *同步阻塞总结
     * 1.单线程：某个socket阻塞,会影响到其他socket处理。
     * 2.多线程：客户端较多时,会造成资源浪费,全部socket中可能每个时刻只有
     *          几个就绪。同时,线程的调度,上下文切换乃至它们占用的内存,可能会成为瓶颈
     *
     * 优点：单个socket阻塞,不会影响到其他socket
     * 缺点：需要不断的遍历进行系统调用,有一定开销
     */

    /**
     * select总结
     *
     *  将socket是否就绪检查逻辑下沉到操作系统层面,避免大量系统调用。告诉你有事件就绪
     *  但没告诉你具体是那个FD.
     *  优点：
     *   不需要每个FD都进行一次系统调用,解决了频繁的用户态内核态切换问题
     *  缺点：
     *   单进程监听的FD存在限制,默认1024个
     *   每次调用需要将FD从用户态内拷贝到内核态
     *   不知道具体是哪个文件描述符就绪,需要遍历全部文件描述符
     *   入参的3个fd_set集合每次调用都需要重置
     *
     */

    /**
     * poll总结
     *    跟select基本类似,主要优化了监听1024的限制
     *
     *  优点：不需要每个FD都进行一次系统调用
     *  导致频繁的用户态内核态切换
     *
     *  缺点：
     *    每次需要将FD从用户态拷贝到内核态
     *    不知道具体是哪个文件描述符就绪,需要遍历全部文件描述符
     *
     */

}
